package apps.logica;
import java.io.Serializable;
import java.util.Date;

import javax.annotation.Resource;
import javax.ejb.MessageDriven;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDrivenContext;
import javax.inject.Inject;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;

import apps.modelo.ReenvioTransferencia;
import apps.negocio.ReenvioDao;

@MessageDriven(mappedName="mailQueue", 
			   activationConfig =  
		   		{
				@ActivationConfigProperty(propertyName = "destination", 
				 propertyValue = "queue/test"),
	    		@ActivationConfigProperty(propertyName = "acknowledgeMode",
	    		 propertyValue = "Auto-acknowledge"),
	            @ActivationConfigProperty(propertyName = "destinationType",
	             propertyValue = "javax.jms.Queue")
				})
public class DrivenBean implements MessageListener, Serializable
{
	private static final long serialVersionUID = 1L;
	@Resource
	public MessageDrivenContext mdc;
	
	@Inject
	ReenvioDao envios;
	
	
	@Override
	public void onMessage(Message inMessage) //ejecutar automaticamente cada vez q el mensaje esta en la cola
	{
		try 
	    {
	    	MapMessage 	msg = (MapMessage) inMessage;//convierte el mensaje a MapMessage
	    	String entidadOrigen =msg.getString("identidadOrigen");//extrae los campos del mensaje
	    	String entidadDestino =msg.getString("identidadDestino");
	    	String numCta=msg.getString("numCta");
	    	String tipoCta=msg.getString("tipoCta");
	    	String monto=msg.getString("monto");
	    	String cedulaOrigen=msg.getString("cedulaOrigen");
	    	String cedulaDestino=msg.getString("cedulaDestino");
	    	String usuarioOrigen=msg.getString("usuarioOrigen");
	    	String usuarioDestino=msg.getString("usuarioDestino");
	    	
	    	ReenvioTransferencia reenvio=new ReenvioTransferencia();
	    	
	    	reenvio.setEntidadOrigen(entidadOrigen);
	    	reenvio.setEntidadDestino(entidadDestino);
	    	reenvio.setTipoCta(tipoCta);
	    	reenvio.setMonto(Double.valueOf(monto));
	    	reenvio.setCedulaOrigen(cedulaOrigen);
	    	reenvio.setCedulaDestino(cedulaDestino);
	    	reenvio.setUsuarioOrigen(usuarioOrigen);
	    	reenvio.setUsuarioDestino(usuarioOrigen);
	    	
	    	
	    	Date d=new Date();
	    	
	    	//reenvio.setFecha(d.getDate()+"  "+d.getHours()+":"+d.getMinutes()+":"+ d.getSeconds());
	    	System.out.println("Enviado: a "+entidadDestino+" desde "+usuarioOrigen+" "+"con cedula"+cedulaOrigen);
	    	
	    	envios.insert(reenvio);
			try {Thread.sleep(3000);
			System.out.println("sale"+(new Date()).toString());
			}catch(Exception e){}


	    } catch (JMSException e) {
	    	mdc.setRollbackOnly();//mensaje que pueda ser atendido, va a tratar de enviar
	    	e.printStackTrace();
	    } catch (Throwable te) {
	    	Throwable e = null;
			//e.printStackTrace();
	    }
	}
}